package com.munichosica.myapp.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.munichosica.myapp.dao.EntradaSalidaDao;
import com.munichosica.myapp.dto.EntradaSalida;
import com.munichosica.myapp.dto.Producto;
import com.munichosica.myapp.dto.Tienda;
import com.munichosica.myapp.exceptions.CategoriaDaoException;
import com.munichosica.myapp.exceptions.EntradaSalidaDaoException;
import com.munichosica.myapp.exceptions.TiendaDaoException;

public class EntradaSalidaDaoImpl  implements EntradaSalidaDao{
	StringBuilder sql=null;
	StringBuilder sqlSelect=null;
	
	public EntradaSalidaDaoImpl(){
		sql=new StringBuilder();
	}
	
	@Override
	public void insertar(EntradaSalida entradaSalida) throws EntradaSalidaDaoException {
		sql.append("INSERT INTO  entrada_salida (procodigo_i ,tiecodigo_i ,almcodigo_i ,escantidad_i ,estipo_c,motcodigo_i )" +
				"VALUES (?,?,?,?,?,? )");
		Connection conn=null;
		PreparedStatement stmt=null;
		ResultSet rs=null;
		try {
			conn=ResourceManager.getConnection();
			stmt=conn.prepareStatement(sql.toString());
			stmt.setInt(1, entradaSalida.getProducto().getProcodigoI());
			stmt.setInt(2, entradaSalida.getTienda().getTiecodigoI());
			stmt.setInt(3, entradaSalida.getAlmacen().getAlmcodigoI());
			stmt.setInt(4, entradaSalida.getEscantidadI());
			stmt.setString(5, entradaSalida.getEstipoC());
			stmt.setInt(6, entradaSalida.getMotivo().getMotcodigoI());
			stmt.executeUpdate();		
			
		} catch (SQLException e) {
			throw new EntradaSalidaDaoException(e.getMessage(),e);
		} finally{
			ResourceManager.close(rs);
			ResourceManager.close(stmt);
			ResourceManager.close(conn);
		}
	}

	@Override
	public List<EntradaSalida> listarPorCriterio(String criterio,String texto,String estado) throws EntradaSalidaDaoException {
			sql.append("SELECT " +
					"TIE.TIENOMBRE_V, "
					+ "TIE.TIECODIGO_I," 
					+ " SUM(ES.ESCANTIDAD_I) AS  ESCANTIDAD_I"
					+ " FROM ENTRADA_SALIDA ES"
					+ " INNER JOIN TIENDA TIE ON TIE.TIECODIGO_I=ES.TIECODIGO_I "+
					"WHERE TIE.TIEESTADO_C LIKE '%"+estado.trim()+"%' "
					+ " GROUP BY TIE.TIENOMBRE_V,TIE.TIECODIGO_I"
					);
			if(!criterio.isEmpty()) sql.append(" AND "+criterio.trim()+" LIKE '%"+texto.trim()+"%'");

			Connection conn=null;
			PreparedStatement stmt=null;
			ResultSet rs=null;
			List<EntradaSalida> lista=null;
			try {
				conn=ResourceManager.getConnection();
				stmt=conn.prepareStatement(sql.toString());
				boolean results=stmt.execute();
				if(results){
					lista=new ArrayList<EntradaSalida>();
					rs=stmt.getResultSet();
					EntradaSalida oEntradaSalida=null;
					double i=0;
					while(rs.next()){
						i++;
						oEntradaSalida=new EntradaSalida();
						Tienda tienda= new Tienda();
						tienda.setTienombreV(rs.getString("TIENOMBRE_V"));
						tienda.setTiecodigoI(rs.getInt("TIECODIGO_I"));
						oEntradaSalida.setNumeracion(i);
						oEntradaSalida.setTienda(tienda);
						oEntradaSalida.setEscantidadI(rs.getInt("ESCANTIDAD_I"));
						lista.add(oEntradaSalida);
					}
				}
			} catch (SQLException e) {
				throw new EntradaSalidaDaoException(e.getMessage(),e);
			} finally{
				ResourceManager.close(rs);
				ResourceManager.close(stmt);
				ResourceManager.close(conn);
			}
			
			return lista;
	}

	@Override
	public List<EntradaSalida> ViewProductsByStore(String codigo) throws EntradaSalidaDaoException {
		sql.append("SELECT " +
				"PRO.PRONOMBRE_V, "
				+ "PRO.PROCODIGO_I,"
				+ " SUM(ES.ESCANTIDAD_I) AS  ESCANTIDAD_I"
				+ " FROM ENTRADA_SALIDA ES"
				+ " INNER JOIN PRODUCTO PRO ON PRO.PROCODIGO_I=ES.PROCODIGO_I "+
				"WHERE ES.TIECODIGO_I="+codigo+" "
				+ " GROUP BY PRO.PRONOMBRE_V,PRO.PROCODIGO_I"
				);

		Connection conn=null;
		PreparedStatement stmt=null;
		ResultSet rs=null;
		List<EntradaSalida> lista=null;
		try {
			conn=ResourceManager.getConnection();
			stmt=conn.prepareStatement(sql.toString());
			boolean results=stmt.execute();
			if(results){
				lista=new ArrayList<EntradaSalida>();
				rs=stmt.getResultSet();
				EntradaSalida oEntradaSalida=null;
				double i=0;
				while(rs.next()){
					i++;
					oEntradaSalida=new EntradaSalida();
					Producto producto= new Producto();
					producto.setPronombreV(rs.getString("PRONOMBRE_V"));
					producto.setProcodigoI(rs.getInt("PROCODIGO_I"));
					oEntradaSalida.setNumeracion(i);
					oEntradaSalida.setProducto(producto);
					oEntradaSalida.setEscantidadI(rs.getInt("ESCANTIDAD_I"));
					lista.add(oEntradaSalida);
				}
			}
		} catch (SQLException e) {
			throw new EntradaSalidaDaoException(e.getMessage(),e);
		} finally{
			ResourceManager.close(rs);
			ResourceManager.close(stmt);
			ResourceManager.close(conn);
		}
		
		return lista;
	}
}
